package com.weijian.demo1.controller;

import com.weijian.demo1.entity.Document;
import com.weijian.demo1.service.DocumentService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 文档管理控制器
 * 提供文档的创建、查询、更新、删除等CRUD操作API接口
 */
@RestController
@RequestMapping("/api/documents")
@CrossOrigin(origins = "*")
@Tag(name = "文档管理", description = "提供文档的创建、查询、更新、删除等CRUD操作API接口")
public class DocumentController {

    @Autowired
    private DocumentService documentService;

    /**
     * 创建新文档
     * @param document 文档信息（标题、内容、团队ID等）
     * @param userId 创建者用户ID
     * @return 创建成功的文档对象，包含文档ID和创建时间
     * @apiNote 文档会自动关联到指定团队，创建者成为文档所有者
     */
    @PostMapping
    @Operation(summary = "创建新文档", description = "创建一个新的文档，文档会自动关联到指定团队，创建者成为文档所有者")
    public Document createDocument(
            @RequestBody @Parameter(description = "文档信息") Document document, 
            @RequestParam @Parameter(description = "创建者用户ID") Long userId) {
        return documentService.createDocument(document, userId);
    }

    /**
     * 获取指定团队的所有文档
     * @param teamId 团队ID
     * @return 该团队下的所有文档列表
     * @apiNote 返回的文档列表按创建时间倒序排列
     */
    @GetMapping("/team/{teamId}")
    @Operation(summary = "获取指定团队的所有文档", description = "根据团队ID获取该团队下的所有文档，返回的文档列表按创建时间倒序排列")
    public List<Document> getTeamDocuments(@PathVariable @Parameter(description = "团队ID") Long teamId) {
        return documentService.getDocumentsByTeam(teamId);
    }

    /**
     * 根据文档ID获取文档详情
     * @param id 文档ID
     * @return 文档的完整信息
     * @apiNote 包含文档内容、版本号、最后修改时间等完整信息
     */
    @GetMapping("/{id}")
    @Operation(summary = "根据文档ID获取文档详情", description = "根据文档ID获取文档的完整信息，包含文档内容、版本号、最后修改时间等")
    public Document getDocument(@PathVariable @Parameter(description = "文档ID") Long id) {
        return documentService.getDocumentById(id);
    }

    /**
     * 更新文档信息
     * @param id 文档ID
     * @param document 更新的文档信息（标题、内容等）
     * @return 更新后的文档对象
     * @apiNote 会自动更新版本号和最后修改时间，支持乐观锁
     */
    @PutMapping("/{id}")
    @Operation(summary = "更新文档信息", description = "更新指定文档的信息，会自动更新版本号和最后修改时间，支持乐观锁机制")
    public Document updateDocument(
            @PathVariable @Parameter(description = "文档ID") Long id, 
            @RequestBody @Parameter(description = "更新的文档信息") Document document) {
        return documentService.updateDocument(id, document);
    }

    /**
     * 删除指定文档
     * @param id 文档ID
     * @apiNote 删除操作会同时清除内存缓存，操作不可恢复
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除指定文档", description = "删除指定的文档，删除操作会同时清除内存缓存，操作不可恢复")
    public void deleteDocument(@PathVariable @Parameter(description = "文档ID") Long id) {
        documentService.deleteDocument(id);
    }
}